#!/bin/bash
# Created by Mohit Joshi, Percona LLC

################################################################################
# Welcome to the pquery v3.0 configuration file (pquery3-run.conf). Feel free  #
# to copy this file, edit the copy & change the CONFIGURATION_FILE variable    #
# in pquery-run.sh to match!                                                   #
# Please do not change this file unless your name is listed above. As a        #
# template/default, it is the only configuration file for pquery v3.0 which    #
# is maintained whenever pquery-run.sh is updated.                             #
################################################################################

# ################### User configurable variables: generics 1 ##################
# pquery3-ps: Percona Server, pquery3-ms: MySQL                                #
################################################################################
PQUERY_BIN=${SCRIPT_PWD}/../src/pstress-ps

################################################################################
# If enabled, high quality generated SQL is used (the generator is  located in #
# percona-qa/generator)                                                        #
################################################################################
USE_GENERATOR_INSTEAD_OF_INFILE=0

################################################################################
# If enabled, and if USE_GENERATOR_INSTEAD_OF_INFILE=1, then the INFILE        #
# is added to the generator output                                             #
################################################################################
ADD_INFILE_TO_GENERATED_SQL=0

################################################################################
# Options for pquery v3.0 used to define the type of DDLs/DMLs/SQLs to be      #
# executed. Default options added.                                             #
# Please modify the parameters as per needs before starting the runs.          #
################################################################################
DYNAMIC_QUERY_PARAMETER="--tables 10 --records 100 --log-all-queries --log-failed-queries"
SEED=

################################################################################
# Should be used with caution when a large INFILE is used. It is ideal for     #
# small input files (feature testing)                                          #
# Default: main-ms-ps-md.sql (mtr_to_sql.sh of all major distro's + engine mix #
# Use main-ws.sql for mysql-fb                                                 #
################################################################################
INFILE=${SCRIPT_PWD}/pstress.sql

################################################################################
# Set to the right distribution + version to match mysqld options (as generated#
# by generate_mysqld_options.sh)                                               #
# ex. mysqld_options_ps_56.txt, mysqld_options_ms_56.txt,                      #
# mysqld_options_ms_57.txt, mysqld_options_ps_55.txt                           #
################################################################################
OPTIONS_INFILE=${SCRIPT_PWD}/mysqld_options_ms_80.txt

# TokuDB options list
TOKUDB_OPTIONS_INFILE=${SCRIPT_PWD}/pquery/mysqld_options_tokudb.txt

# MySQL Basedir. Required for all runs, including PXC
# eg. BASEDIR=$HOME/mysql-8.0/bld/install
BASEDIR=$HOME/path/to/bld/directory

################################################################################
# Working directory. Here we keep the log files, option list, failed items.    #
# Please leave $RANDOMD!                                                       #
################################################################################
WORKDIR=$HOME/test_p/$RANDOMD

################################################################################
# Run directory. Keeps a copy of the data dir template & stores mysqld runs    #
# (--datadir=x). Pls leave $RANDOMD!                                           #
################################################################################
RUNDIR=/tmp/$RANDOMD

################################################################################
# The option is used to stop the server in different ways                      #
# for ex -                                                                     #
# SIGNAL=15    => This will perform a normal shutdown                          #
# SIGNAL=9     => This will kill the server with SIG9(kill -9) only            #
# SIGNAL=4     => This will kill the server with SIG4(kill -4) only            #
#                                                                              #
# Default : SIGNAL=9                                                           #
#                                                                              #
# Note: Any other value passed apart from above listed will be invalid and     #
# result in terminating pstress                                                #
################################################################################
SIGNAL=9

# Sysbench data load. Normally set to 0 (off)
SYSBENCH_DATALOAD=0

################################################################################
#              User configurable variables: generics 2                         #
################################################################################

################################################################################
# Number of individual trials to execute (one can always interrupt with ctrl+c #
################################################################################
TRIALS=5

################################################################################
# Add random mysqld --options to MYEXTRA using an input file. 1=On, 0=off.     #
# (Auto-disabled if PXC=1)                                                     #
################################################################################
ADD_RANDOM_OPTIONS=0

################################################################################
# Add random tokudb --options to MYEXTRA using an input file. 1=On, 0=off.     #
# (Auto-disabled if PXC=1)                                                     #
################################################################################
ADD_RANDOM_TOKUDB_OPTIONS=0

################################################################################
# Max nr of random options to add (minimum is always 1).                       #
# Recommended: 4. Counts per ADD_RANDOM_... option above (x2)                  #
################################################################################
MAX_NR_OF_RND_OPTS_TO_ADD=5

################################################################################
# Save only trials that generate a core file (good for initial few runs where  #
# there are lot of crashes/asserts)                                            #
################################################################################
SAVE_TRIALS_WITH_CORE_OR_VALGRIND_ONLY=0

################################################################################
# Saves per-trial SQL even if SAVE_TRIALS_WITH_CORE_OR_VALGRIND_ONLY=1.        #
# Main usecase: full server lockups/hangs                                      #
################################################################################
SAVE_SQL=0

################################################################################
# Store a copy of the INFILE SQL input file in the work directory (not related #
# to per-trial SQL)                                                            #
################################################################################
STORE_COPY_OF_INFILE=0

################################################################################
# x sec max trial runtime within which pquery tries to process                 #
# QUERIES_PER_THREAD x THREADS queries against 1 mysqld                        #
################################################################################
PQUERY_RUN_TIMEOUT=60

################################################################################
# x sec incremented in each trial. The first trial will run for                #
# PQUERY_RUN_TIMEOUT sec. The next run will be incremented by x sec and        #
# so on...                                                                     #
# ex. if PQUERY_RUN_TIMEOUT=100 and TIMEOUT_INCREMENT=10                       #
# Trial1=100, Trial2=110s, Trial3=120s                                         #
# To disable set TIMEOUT_INCREMENT=0                                           #
################################################################################
TIMEOUT_INCREMENT=0

################################################################################
# Maximum number of queries executed per thread (THREADS) per trial (small =   #
# faster reduction, large = more crashes)                                      #
################################################################################
QUERIES_PER_THREAD=100000

################################################################################
# Used when USE_GENERATOR_INSTEAD_OF_INFILE=1. Default: 20000. Generating 10K  #
# queries takes about 15 seconds on SSD                                        #
################################################################################
QUERIES_PER_GENERATOR_RUN=25000

################################################################################
# Run the SQL Generator every x trials. Default is 10. This aids runs as less  #
# time is spent generating queries                                             #
################################################################################
GENERATE_NEW_QUERIES_EVERY_X_TRIALS=10

################################################################################
# Extra options to pass to mysqld AND at data directory init time, for example #
# MYINIT="--early-plugin-load=keyring_file.so --keyring_file_data=keyring      #
# --innodb_sys_tablespace_encrypt=ON"                                          #
################################################################################
MYINIT="--early-plugin-load=keyring_file.so --keyring_file_data=keyring"

################################################################################
# Extra options to pass to mysqld. Examples below                              #
################################################################################
MYEXTRA="--early-plugin-load=keyring_file.so --keyring_file_data=keyring"

###############################################################################
# 5.6/5.7                                                                     #
# MYSAFE: See http://bugs.mysql.com/?id=73916 re: testing env setup. MYSAFE   #
# ensures cleaner/better QA runs                                              #
###############################################################################
MYSAFE="--no-defaults --max_allowed_packet=33554432 --maximum-bulk_insert_buffer_size=1M --maximum-join_buffer_size=1M --maximum-max_heap_table_size=1M --maximum-max_join_size=1M --maximum-myisam_max_sort_file_size=1M --maximum-myisam_mmap_size=1M --maximum-myisam_sort_buffer_size=1M --maximum-optimizer_trace_max_mem_size=1M --maximum-preload_buffer_size=1M --maximum-query_alloc_block_size=1M --maximum-query_prealloc_size=1M --maximum-range_alloc_block_size=1M --maximum-read_buffer_size=1M --maximum-read_rnd_buffer_size=1M --maximum-sort_buffer_size=1M --maximum-tmp_table_size=1M --maximum-transaction_alloc_block_size=1M --maximum-transaction_prealloc_size=1M --log-output=none --sql_mode=ONLY_FULL_GROUP_BY"

################################################################################
# Number of threads to use. Default: 1. Set to >1 to enable multi-threaded     #
# runs. Also see MULTI_THREADED_TESTC_LINES                                    #
################################################################################
THREADS=20

################################################################################
# Only takes effect if THREADS>1. pquery-run will take this amount of lines    #
# to form individual testcases for multi-threaded runs. IOW, if THREADS=1,     #
# pquery-run will just run one client, continously getting random queries out  #
# of INFILE, untill QUERIES_PER_THREAD queries is reached (if mysqld does not  #
# crash earlier). On the other hand, if THREADS>1, pquery-run will take a      #
# random chunk out of INFILE (to the amount of MULTI_THREADED_TESTC_LINES      #
# lines) _before_ starting each trial run. It will then run pquery, with       #
# THREADS threads, only using that smaller chunk extracted from INFILE. These  #
# individual SQL input files are saved in the trial's dirtory. You may want to #
# keep this number small to ensure that true-multi-threaded testcase reduction #
# using reducer.sh is still sufficiently fast (25K lines takes a few days to   #
# reduce), while keeping it large enough to ensure crashes/asserts to start    #
# with.                                                                        #
################################################################################
MULTI_THREADED_TESTC_LINES=25000

################################################################################
# User configurable variables to enable query correctness testing              #
# Note: if/when using RocksDB as a primary or secondary engine, it must be     #
# spelled correctly as: RocksDB. Variations like: rocksdb will cause failures  #
# in this script                                                               #
################################################################################

################################################################################
# Set to 1 to enable query correctness testing. Normally set to 0 (off)        #
################################################################################
QUERY_CORRECTNESS_TESTING=0

################################################################################
# Sets the result comparison modes: 0: errors/warnings, 1: 'changed rows'      #
# comparision, 2: actual query results                                         #
################################################################################
QUERY_CORRECTNESS_MODE=2

################################################################################
# Number of queries sampled/used per trial (executed against both engines      #
# below, then results are compared)                                            #
################################################################################
QC_NR_OF_STATEMENTS_PER_TRIAL=2000

################################################################################
# Primary comparison engine for query correctness testing. Make sure to match  #
# this with MYEXTRA ('left engine')                                            #
################################################################################
QC_PRI_ENGINE=InnoDB

################################################################################
# Secondary comparison engine for query correctness testing. Make sure to      #
# match this with MYEXTRA2 ('right engine')                                    #
################################################################################
QC_SEC_ENGINE=InnoDB

################################################################################
# Used for secondary mysqld (RocksDB testing)                                  #
################################################################################
MYEXTRA2="--default-tmp-storage-engine=MyISAM --default-storage-engine=InnoDB --collation-server=latin1_bin"

################################################################################
# User configurable variables to enable query duration testing                 #
################################################################################

################################################################################
# Partially implemented only. Needs further development.                       #
################################################################################
QUERY_DURATION_TESTING=0

################################################################################
# User configurable variables to enable crash recovery testing only            #
################################################################################

################################################################################
# Set to 1 to make this a crash recovery test (terminates server after x       #
# seconds and then attempts crash recovery)                                    #
################################################################################
CRASH_RECOVERY_TESTING=0

################################################################################
# Currently using simple.sql for crash recovery testing. This can be changed/  #
# expanded upon                                                                #
################################################################################
CRASH_RECOVERY_INFILE=${SCRIPT_PWD}/simple.sql

################################################################################
# Kill the server x seconds before the end of the trial. Ensure trial duration #
# is somewhat larger then this                                                 #
################################################################################
CRASH_RECOVERY_KILL_BEFORE_END_SEC=20
